import numpy as np
# generate a random scalar
print(np.random.rand())
# generate a 1-D array
print(np.random.rand(3))
# generate a 2-D array
print(np.random.rand(3,3))
print(np.random.randn(3,3))
# np.ranodm.randint(low, high, size, dtype)
print(np.random.randint(1, 10, 3, 'i8'))
# the following methods are the same as np.random.rand()
print(np.random.random_sample(10))
print(np.random.random(10))
print(np.random.ranf(10))
print(np.random.sample(10))
# np.random.choice(iterable_or_int, size, replace=True, p=weights)
print(np.random.choice(range(3), 10, replace=True, p=[0.1, 0.8, 0.1]))
print(np.random.choice(3, 10))
print(np.random.choice([1,2,3], 10))
arr = np.array(range(10))
print(arr)
np.random.shuffle(arr)
print(arr)
# similar to np.random.shuffle(), but it returns a copy rather than making changes in place
arr = np.array(range(10))
print('The initial array: ', arr)
print('A permutation of the array: ', np.random.permutation(arr))